Leetcode技術面的文章筆者都寫完了
接下來開始是Leetcode的補充篇
主要是在講刷題的心態部分和一些其他的補充
文章有點雜亂請見諒
筆者非常喜歡jserv大神在他的開源課程中不段強調的”誠實面對自己”原則
撇除難度2400以上的題目
只考慮面試大多時候會考的範圍
對一個號稱寫了500題的人隨便抽考
1分鐘內知道這題是哪個topic的可能還有90%答對率
5分鐘內能把演算法完整寫成pseudo code可能只剩下50%機率
15分鐘內寫完不用debug一次AC可能剩下10%
25分鐘內給時間debug跟檢查跟run code能AC可能還有30%
因為45分鐘內還要花時間先自我介紹跟確認題目input output
分析演算法複雜度跟dry run跟一邊寫一邊講解 (一邊確認面試官有跟上你的code)
基本上面試除了要不斷溝通以外,理想狀況最好是能做到3.,不行的話也要有4.
對新手而言,寫過的題目會一直忘記之前是怎麼寫出來的是非常正常的
像筆者當時也是不斷地覺得兩個月前做過的題目怎麼兩個月之後再看自己的code完全沒有印象,所以無論Leetcode上面的紀錄是AC幾題,實際面試的時候等效有用的題數,每個人剩下的都不一樣
筆者一律建議用leetcode contest分數去評估自己的實力區間
另外比leetcode contest的時候也要誠實面對自己
不要揪了一群人一起寫 誰先寫出來之後其他人就都照著他的想法寫出來
挑有把握的比賽開本帳比 其他時候用小帳
等等等等
沒有人會因為看到誰leetcode rating 是XXXX分就直接錄取人...
所以自己欺騙自己一點好處都沒有..
–--
沒有什麼樣的模式是正確的刷題模式
但是有一些經典的反模式(反例)可以讓人見不賢而內自省
堅持己見,抱者自己的爛方法(演算法)爛code不放
通常這種心態跟拉不下臉認錯 不接受別人指責也有相關
堅持沒效率的方法
像是先回去找厲害的演算法課本,把基本的演算法都從課本上學會了再開始刷題
放縱找藉口 自己騙自己 說到做不到
覺得明天再開始也可以 或是明明已經開始了 但是朋友約飯 約出去玩就跟著去
覺得今天寫不完沒關係,週末認真花時間一定可以補上今天的進度
(遇到撞牆的情況要怎麼調適明天的文章會再補充)
有submit有心安
題目想想不會跑去看解答之後(為了趕上自己規劃的進度)
貼上submit之後就覺得自己會了
尤其是對於剛寫完169題的讀者們
可能覺得要還要再寫到500題去面試感覺差距很大,還有好多好多題要寫
但其實不太需要擔心一開始每天只能寫1-2題的緩慢進度
到了掌握基本套路之後寫題目的速度會越來越快
寫完169題之後可能可以一天寫3題
寫了500題之後一天寫3-5題加上複習以前寫過的3-5題可能都不是問題
在規劃進度的時候可以稍微地把自己以後的速度會進步這件事情考慮進去
(尤其看2400+以上的強者比賽的時候前三題幾乎都可以在15-30分鐘內寫完)
必讀的Huli文章:
學程式的第零課:心態調整
打造「正確」學習 mindset
不知道是不是228以來的歷史因素影響(問太多問題的人會被檢舉)
台灣人自小以來普遍都不太敢問問題
別的國家是“你不會怎麼不問問題?” 台灣是“你不會怎麼敢問問題?“
以至於缺乏問問題的練習,導致常常論壇討論區看到的問題品質也都蠻差的
不過筆者時常在這三個FB討論區和line群潛水,
幾乎沒有人會問leetcode的技術問題
(當然討論區都寫的很完整清楚跟問題常常沒有得到好的回應是兩大原因)
(主要都是在討論一些刷題的心得和面試的情報還有戰學歷之類的)
LeetCode 刷題討論群
APCS/CPE/Hacker Rank/LeetCode/OJ
FB Leetcode Taiwan
對於提升問題品質,筆者沒打算過多著墨 (因為Huli的文章實在寫的很好XD?)
那些可以問得更好的程式問題
meme of 在社群提問的正確方法:
我只有三千塊的預算,是不是買不到理想音質的耳機 (X)
三千塊以下的耳機都是垃圾,不服來戰 (O)
我的經驗是如果問問題的人問的問題看得出來用心整理
基本上社群的人都還蠻熱心且蠻樂意幫大家解答的
(但是常常發文的人就自己刪文了Orz)
筆者自己最常遇到的問題是不能理解為什麼我的演算法不對而討論區的對
(但通常我會自己debug或是對拍然後自己找到解答Orz)
如果沒時間用心整理自己的問題也可以問看看大家LC XXX題有沒有什麼心得
或是有沒有同類型題目的推薦,相信答案簡單的問題社群也是都很樂意回答的
(或是來推薦筆者的這系列文章XDD)
面試的過程已經有非常多運氣決定,無法掌握的事情了:
像是面試官是誰,題目有沒有剛好出到會的,當天的精神狀況,是不是已經找到其他更優秀的候選人,Hiring Comittee/Team match的主管看你順不順眼,大環境景氣招工狀況等等等等
其他可以掌握所以應該要好好掌握做到最好的像是:
好好整理自己履歷,把Leetcode分數穩定維持在目標區間,好好實踐刷題進度好好理解,認真準備BQ故事,注意面試要注意的小細節,誠實面對自己
推薦文章
AA競程分享的codeforce心得文"自欺欺人:也許你在每天的勤奮練習後仍然無法進步”
最後附上筆者在typeracer讀到很喜歡的Kobe語錄
A lot of people say they want to be great, but they're not willing to make
the sacrifices necessary to achieve greatness. They have other concerns,
whether important or not, and they spread themselves out. That's totally
fine. After all, greatness is not for everybody.-- 《The Mamba Mentality: How I Play》, Kobe Bryant